package com.example.auth.uitls;



import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @Classname Md5Util
 * @Description TODO
 * @Date 2022/6/2 12:42
 * @Created by XiongXiong
 * @Author: X.I.O
 */
public class Md5Util {

  /**
   * java自带jar工具 java.security.MessageDigest 实现
   *
   * @param text  要加密的字符串
   * @param rad   进制：比如 16、32
   * @param isUpp 是否转换为大写
   * @return
   */
  public static String strToMD5(String text, int rad, boolean isUpp) {
    MessageDigest messageDigest = null;
    try {
      //通过MessageDigest类来的静态方法getInstance获取MessageDigest对象
      messageDigest = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }
    // 4、获取明文字符串对应的字节数组
    byte[] input = text.getBytes();
    // 5、执行加密
    messageDigest.update(input);
    //这里也可以直接使用byte[] output = messageDigest.digest(input)方法来进行加密，就省略了上面的update方法了
    byte[] output = messageDigest.digest();
    // 6、创建BigInteger对象
    // signum为1表示正数、-1表示负数、0表示0。不写默认表示正数
    int signum = 1;
    BigInteger bigInteger = new BigInteger(signum, output);
    // 7、按照16进制(或32进制)将bigInteger转为字符串
    return isUpp ? bigInteger.toString(rad).toUpperCase() : bigInteger.toString(rad);
  }

  public static String strToMD5(String str){
      return strToMD5(str,16,true);
  }



}
